#include <stdio.h>
#include <string.h>
#include <stdlib.h>


char * Mystrcpy(char* dest,const char* src)
{
    char * temp = dest;
    while (*src !='\0')
    {
        *dest = *src;
        src++;
        dest++;
    }
    /*退出循环：说明*src == '\0'*/
    *dest = '\0';
    return temp;
}

int main()
{
    /*
        字符串函数：
        1.strlen函数
        int strlen(const char * str);
        2.strcmp函数 - 比较两个字符串的大小
        int strcmp(const char * str1, const char * str2);
        3.strcat函数 - 拼接两个字符串
        char * strcat(char * dest, const char * src);
        4.strcpy函数 - 拷贝字符串
        char * strcpy(char * dest, const char * src);
    */

    /*
        函数的三要素
        1.函数名
        2.函数的返回值
        3.函数的参数-形参（传入传出参数）
            传入参数：不可以被修改
            传出参数：一定被修改
        
    */
#if 0
    /*字符串 - 全局常量区*/
    char *dest = "zqeqwwseqwa";
    /*字符数组 - 栈空间*/
    char dst[] = "sqsSQSqs";
    const char * src = "zhasqsqs";
    //strcpy(dst,src);
    //Mystrcpy(dst,src);
    char * res = Mystrcpy(dst,src);
    printf("%s\n",res);
#endif

    /*字符串*/
    /*动态分配内存——如果不释放内存就会导致内存泄漏*/
    char * str = (char *)malloc(sizeof(char)*1024);
    /*清除脏数据*/
    memset(str,0,sizeof(char)*1024);
    strcpy(str,"adwda");
    printf("%s\n",str);
    free(str);

     /*指针必须初始化为null*/
    int *pNum = NULL;

    /*
        导致内存泄漏的三种方式：
            1.野指针（未初始化的指针:  int * pNum;）
            2.malloc分配的空间不释放
            3.踩内存（占用了不属于自己的空间）
    */

}